A random number generator (RNG) may include a computational or physical device designed to generate a sequence of values that may be treated as random, e.g., an unpredictable sequence of statistically independent numbers. That is, knowledge of a previously generated number may not add knowledge regarding the next generated number. A RNG may be implemented for diverse applications, for example, in the fields of cryptography, computer simulations, statistical sampling, etc. For example, the RNG may be used for the creation of cryptographic keys in a secure communication system, for initialization sequences (“seeds”) in random algorithms, in spread-spectrum signaling, or for applications that use stochastic simulation methods, e.g., Monte-Carlo.
In many cryptographic systems, it may be required to integrate the RNG on chip, e.g., in order to make it hard to tamper with the RNG and/or in order to simplify a fabrication process.
A Pseudo RNG (PRNG) may have a periodic signal over large cycles and may be mathematically predictable. The PRNG may be used, for example, when randomness requirements are not very rigorous. However, in most security applications a True RNG (TRNG) may be required.